/**
 * PanelPerfiles.java
 */
/**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */
package adsec.presentacion;

import java.sql.Date;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import adsec.entidades.Estado;
import adsec.entidades.Perfil;
import adsec.entidades.PerfilYUsuarioBD;
import adsec.entidades.Permiso;
import adsec.entidades.UsuarioBD;
import adsec.negocios.AdministradorSeguridad;
import adsec.negocios.ControladoraPerfiles;
import adsec.negocios.UtilidadesCapaNegocios;
import org.jdesktop.application.Action;

public class PanelPerfiles extends javax.swing.JPanel implements ListSelectionListener {

	private AdministradorSeguridad adminSeguridad;
	private ControladoraPerfiles controladoraPerfiles;
	private Permiso permisoPerfil;
	private Estado estado;
	private int idPerfil = -1;
	private boolean modificandoAdmin;
	private boolean modificandoDocente;

	/** Creates new form PanelPerfiles */
	public PanelPerfiles() {
		initComponents();
		this.iniciarPanelPerfiles();
	}

	public void iniciarPanelPerfiles() {
		this.adminSeguridad = AdministradorSeguridad.getInstancia();
		this.controladoraPerfiles = new ControladoraPerfiles();
		this.permisoPerfil = this.adminSeguridad.getPermiso(UtilidadesCapaNegocios.moduloPerfiles);
		this.estado = new Estado();
		this.setHabilitarCampos(false);
		this.habilitarBotonesIME(this.permisoPerfil.isInsertar(), false, false);
		this.cargarGridPerfiles();
		this.habilitarAceptarCancelar(false);
		this.modificandoAdmin = this.modificandoDocente = false;
	}//fin de iniciarPanelPerfiles

	/**
	 ** Recibe un boolean para habilitar todos los campos de la pantalla
	 ** o ya sea deshabilitarlos
	 **/
	private void setHabilitarCampos(boolean habilitar) {
		this.txtPassword.setEnabled(habilitar);
		this.txtConfirmar.setEnabled(habilitar);
		//No se deben permitir que el administrador modifique sus propios permisos ni su nombre
		//de perfil o de usuario_bd
		if(this.modificandoAdmin){
			habilitar = false;
		}
		this.txtUsuarioBD.setEnabled(habilitar);
		this.matrizPerfiles.habilitarCampos(habilitar);
		for (int fila = 0; fila < this.matrizPerfiles.getFilas(); fila++) {
			for (int columna = 0; columna < this.matrizPerfiles.getColumnas(); columna++) {
				this.matrizPerfiles.setEnabled(fila, columna, habilitar);
			}
		}
		//Se pueden cambiar los permisos del docente, pero no el nombre de su perfil
		if(this.modificandoAdmin || this.modificandoDocente){
			habilitar = false;
		}
		this.txtNombre.setEnabled(habilitar);
	}//fin de setHabilitarCampos

	/**
	 ** Habilita o deshabilita los botones insertar, modificar y eliminar
	 **/
	private void habilitarBotonesIME(boolean insertar, boolean modificar, boolean eliminar) {
		this.btnInsertar.setEnabled(insertar);
		this.btnModificar.setEnabled(modificar);
		this.btnEliminar.setEnabled(eliminar);
	}

	/**
	 ** Habilita o deshabilita los botones aceptar y cancelar
	 **/
	private void habilitarAceptarCancelar(boolean habilitar) {
		this.btnAceptar.setEnabled(habilitar);
		this.btnCancelar.setEnabled(habilitar);
	}

	/**
	 ** Limpia todos los campos de la pantalla
	 **/
	private void limpiarCampos() {
		this.txtNombre.setText("");
		this.matrizPerfiles.limpiarCampos();
		for (int fila = 0; fila < this.matrizPerfiles.getFilas(); fila++) {
			for (int columna = 0; columna < this.matrizPerfiles.getColumnas(); columna++) {
				this.matrizPerfiles.setSelected(fila, columna, false);
			}
		}
	}//fin de limpiarCampos

	/**
	 ** Obtiene todos los datos del perfil y crea un objeto de tipo Perfil
	 ** el cual es retornado
	 ** @return Un Perfil
	 */
	public PerfilYUsuarioBD obtenerDatosPerfil() {
		Perfil perfil = new Perfil();
		perfil.setIdPerfil(this.idPerfil);
		perfil.setNombre(this.txtNombre.getText());
		perfil.setUltimaModificacion(new Date(System.currentTimeMillis()));
		perfil = this.matrizPerfiles.llenarPermisos(perfil);
		UsuarioBD usuarioBD = new UsuarioBD();
		usuarioBD.setNombre(this.txtUsuarioBD.getText());
		usuarioBD.setPassword(new String(this.txtPassword.getPassword()));
		return new PerfilYUsuarioBD(perfil, usuarioBD);
	}//fin de obtenerDatosPerfil

	private void volverConsultar() {
		this.modificandoAdmin = this.modificandoDocente = false;
		this.estado.setEstadoActual(Estado.CONSULTAR);
		//this.habilitarBotonesIME(true, false, false);
		this.habilitarBotonesIME(permisoPerfil.isInsertar(), permisoPerfil.isModificar(), permisoPerfil.isEliminar());
		this.setHabilitarCampos(false);
		this.habilitarAceptarCancelar(false);
		this.cargarGridPerfiles();
	}//fin de volverConsultar

	private void cargarGridPerfiles() {
		this.limpiarGridPerfiles();
		if (this.permisoPerfil.isConsultar()) {
			LinkedList<Perfil> perfiles = controladoraPerfiles.consultarPerfiles();
			Iterator<Perfil> iterador = perfiles.iterator();
			while (iterador.hasNext()) {
				Object arregloDatos[] = new Object[2];
				Perfil perfil = iterador.next();
				arregloDatos[0] = perfil.getNombre();
				arregloDatos[1] = perfil.getUltimaModificacion();
				((DefaultTableModel) this.gridPerfiles.getModel()).addRow(arregloDatos);
			}//fin de while
		}
	}//fin de cargarGridPerfiles

	private void limpiarGridPerfiles() {
		((DefaultTableModel) this.gridPerfiles.getModel()).setRowCount(0);
	}//fin de limpiarGridPerfiles

	public void valueChanged(ListSelectionEvent evento) {
		DefaultListSelectionModel fuente = (DefaultListSelectionModel) evento.getSource();
		if (fuente == (DefaultListSelectionModel) this.gridPerfiles.getSelectionModel()) {
			int filas = ((DefaultTableModel) this.gridPerfiles.getModel()).getRowCount();
			if (filas > 0 && estado.getEstadoActual() == Estado.CONSULTAR && evento.getValueIsAdjusting()) {
				int fila = this.gridPerfiles.getSelectedRow();
				if (fila >= 0) {
					this.consultarPerfil(fila);
				}
			}//fin de if
		}//fin de if
	}//fin de método valueChanged

	private boolean validarDatosObligatorios() {
		boolean resultado = true;
		resultado &= !this.txtNombre.getText().trim().isEmpty();
		resultado &= !this.txtUsuarioBD.getText().trim().isEmpty();
		if(!modificandoAdmin){
			resultado &= !this.txtNombre.getText().equals(Perfil.PERFIL_ADMINISTRADOR);
		}
		if(!modificandoDocente){
			resultado &= !this.txtNombre.getText().equals(Perfil.PERFIL_DOCENTE);
		}
		
		if (!resultado) {
			JOptionPane.showMessageDialog(null, "El nombre del perfil y del Usuario BD no pueden estar vacíos y no pueden llamarse " +
					"\"" + Perfil.PERFIL_ADMINISTRADOR + "\" ni \"" + Perfil.PERFIL_DOCENTE + "\"", "ERROR", JOptionPane.WARNING_MESSAGE);
		} else {
			String password = new String(txtPassword.getPassword()).trim();
			String confirmacion = new String(txtConfirmar.getPassword()).trim();
			resultado &= (password.equals(confirmacion));
			if (!resultado) {
				JOptionPane.showMessageDialog(null, "La contraseña que escribió no es igual a la que confirmó. Intente de nuevo por favor", "ERROR", JOptionPane.WARNING_MESSAGE);
			} else {
				if (password.length() > UsuarioBD.PASS_MAX_LEN) {
					JOptionPane.showMessageDialog(null, "La contraseña no puede tener más de " + UsuarioBD.PASS_MAX_LEN + " caracteres. Intente de nuevo por favor", "ERROR", JOptionPane.WARNING_MESSAGE);
					resultado = false;
				}
			}
		}
		return resultado;
	}//fin de validarDatosObligatorios

	private void insertarPerfil() {
		PerfilYUsuarioBD perfilYUsuario = this.obtenerDatosPerfil();
		if (!UtilidadesCapaNegocios.existeLlave(Perfil.nombreTabla, Perfil.nombreNC, perfilYUsuario.getPerfil().getNombre())) {
			int resultado = this.controladoraPerfiles.insertarPerfil(perfilYUsuario);
			if (resultado == UtilidadesCapaNegocios.QUERY_OK) {
				this.gridPerfiles.getSelectionModel().clearSelection();
				JOptionPane.showMessageDialog(null, "El perfil fue insertado con éxito");
				this.volverConsultar();
			}//fin de if
			else {
				JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloPerfiles, UtilidadesCapaNegocios.opInsertar), "ERROR", JOptionPane.ERROR_MESSAGE);
			}//fin de else
		} else {
			JOptionPane.showMessageDialog(null, "El perfil con nombre " + perfilYUsuario.getPerfil().getNombre() + " ya existe", "ERROR", JOptionPane.ERROR_MESSAGE);
		}
	}//fin de insertarPerfil

	private void modificarPerfil() {
		PerfilYUsuarioBD perfilYUsuario = this.obtenerDatosPerfil();
		int resultado = this.controladoraPerfiles.modificarPerfil(perfilYUsuario);
		if (resultado == UtilidadesCapaNegocios.QUERY_OK) {
			this.gridPerfiles.getSelectionModel().clearSelection();
			JOptionPane.showMessageDialog(null, "El perfil fue modificado con éxito");
			this.volverConsultar();
		}//fin de if
		else {
			JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloPerfiles, UtilidadesCapaNegocios.opModificar), "ERROR", JOptionPane.ERROR_MESSAGE);
		}//fin de else

	}//fin de modificarPerfil

	private void eliminarPerfil() {
		int resultado = this.controladoraPerfiles.eliminarPerfil(this.idPerfil);
		if (resultado == UtilidadesCapaNegocios.QUERY_OK) {
			this.gridPerfiles.getSelectionModel().clearSelection();
			JOptionPane.showMessageDialog(null, "El perfil fue eliminado con éxito");
			this.volverConsultar();
		}//fin de if
		else {
			JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloPerfiles, UtilidadesCapaNegocios.opEliminar), "ERROR", JOptionPane.ERROR_MESSAGE);
		}//fin de else

	}//fin de eliminarPerfil

	private void consultarPerfil(int filaPerfil) {
		PerfilYUsuarioBD perfilYUsuario = this.controladoraPerfiles.consultarPerfilGrid(filaPerfil);
		if (perfilYUsuario != null && perfilYUsuario.getPerfil() != null && perfilYUsuario.getUsuarioBD() != null) {

			Perfil perfil = perfilYUsuario.getPerfil();
			this.idPerfil = perfil.getIdPerfil();
			this.txtNombre.setText(perfil.getNombre());
			this.matrizPerfiles.cargarPerfil(perfil);
			boolean permitirEliminar = true;
			if (perfil.getNombre().equals(Perfil.PERFIL_ADMINISTRADOR)) {
				permitirEliminar = false;
			}
			if (perfil.getNombre().equals(Perfil.PERFIL_DOCENTE)) {
				permitirEliminar = false;
			}
			UsuarioBD usuarioBD = perfilYUsuario.getUsuarioBD();
			this.txtUsuarioBD.setText(usuarioBD.getNombre());
			this.txtPassword.setText(usuarioBD.getPassword());
			this.txtConfirmar.setText(usuarioBD.getPassword());
			this.habilitarBotonesIME(permisoPerfil.isInsertar(),
					permisoPerfil.isModificar(),
					permisoPerfil.isEliminar() && permitirEliminar);
		} else {
			String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloPerfiles, UtilidadesCapaNegocios.opConsultar);
			JOptionPane.showMessageDialog(null, mensaje, "ERROR", JOptionPane.ERROR_MESSAGE);
		}//fin else

	}//fin de consultarPerfil

	@Action
	public void insertandoPerfil() {
		this.estado.setEstadoActual(Estado.INSERTAR);
		this.limpiarCampos();
		this.setHabilitarCampos(true);
		this.habilitarBotonesIME(false, false, false);
		this.habilitarAceptarCancelar(true);
	}//fin de insertandoPerfil

	@Action
	public void modificandoPerfil() {
		this.estado.setEstadoActual(Estado.MODIFICAR);
		this.setHabilitarCampos(true);
		this.habilitarBotonesIME(false, false, false);
		this.habilitarAceptarCancelar(true);
		if(this.txtNombre.getText().equals(Perfil.PERFIL_ADMINISTRADOR)){
			this.modificandoAdmin = true;
		}
		if(this.txtNombre.getText().equals(Perfil.PERFIL_DOCENTE)){
			this.modificandoDocente = true;
		}
	}//fin de insertandoPerfil

	@Action
	public void eliminandoPerfil() {
		Animador.animar();
		if (this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opEliminar, "ELIMINAR")) {
			this.eliminarPerfil();
		}
		Animador.detenerAnimacion();
	}//fin de insertandoPerfil

	/**
	 ** Muestra un mensaje de confirmación para que el usuario decida si realmente
	 ** quiere llevar a cabo una operación
	 ** @param operacion Código de operación realizada, tomada de UtilidadesCapaNegocios
	 ** @param titulo Título a mostrar en el cuadro de confirmación
	 ** @return Confirmación: true si el usuario acepta, false en otro caso.
	 **/
	private boolean mostrarMensajeConfirmacion(int operacion, String titulo) {
		boolean resultado = true;
		String mensaje = UtilidadesCapaNegocios.getMensajeConfirmacion(UtilidadesCapaNegocios.moduloPerfiles, operacion);
		int respuesta = JOptionPane.showConfirmDialog(null, mensaje, titulo, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
		resultado = respuesta == JOptionPane.OK_OPTION;
		return resultado;
	}//fin de mostrarMensajeConfirmacion

	@Action
	public void accionAceptar() {
		Animador.animar();
		switch (estado.getEstadoActual()) {
			case Estado.INSERTAR:
				if (mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opInsertar, "INSERTAR")) {
					if (validarDatosObligatorios()) {
						this.insertarPerfil();
					}
				}
				break;
			case Estado.MODIFICAR:
				if (mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opModificar, "MODIFICAR")) {
					if (validarDatosObligatorios()) {
						this.modificarPerfil();
					}
				}
				break;
		}//fin de switch
		Animador.detenerAnimacion();
	}//fin de accionAceptar

	@Action
	public void accionCancelar() {
		this.limpiarCampos();
		this.volverConsultar();
	}//fin de accionCancelar

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	@SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnCancelar = new javax.swing.JButton();
        btnAceptar = new javax.swing.JButton();
        btnInsertar = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        lbNombre = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        matrizPerfiles = new adsec.presentacion.MatrizPerfiles();
        scrollGrid = new javax.swing.JScrollPane();
        gridPerfiles = new javax.swing.JTable();
        panelUsuarioBD = new javax.swing.JPanel();
        lbNombreBD = new javax.swing.JLabel();
        txtUsuarioBD = new javax.swing.JTextField();
        lbContraseña = new javax.swing.JLabel();
        txtPassword = new javax.swing.JPasswordField();
        lbConfirmar = new javax.swing.JLabel();
        txtConfirmar = new javax.swing.JPasswordField();

        setMinimumSize(new java.awt.Dimension(660, 900));
        setName("Form"); // NOI18N
        setPreferredSize(new java.awt.Dimension(660, 900));

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getActionMap(PanelPerfiles.class, this);
        btnCancelar.setAction(actionMap.get("accionCancelar")); // NOI18N
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getResourceMap(PanelPerfiles.class);
        btnCancelar.setText(resourceMap.getString("btnCancelar.text")); // NOI18N
        btnCancelar.setName("btnCancelar"); // NOI18N

        btnAceptar.setAction(actionMap.get("accionAceptar")); // NOI18N
        btnAceptar.setText(resourceMap.getString("btnAceptar.text")); // NOI18N
        btnAceptar.setName("btnAceptar"); // NOI18N

        btnInsertar.setAction(actionMap.get("insertandoPerfil")); // NOI18N
        btnInsertar.setText(resourceMap.getString("btnInsertar.text")); // NOI18N
        btnInsertar.setName("btnInsertar"); // NOI18N

        btnModificar.setAction(actionMap.get("modificandoPerfil")); // NOI18N
        btnModificar.setText(resourceMap.getString("btnModificar.text")); // NOI18N
        btnModificar.setName("btnModificar"); // NOI18N

        btnEliminar.setAction(actionMap.get("eliminandoPerfil")); // NOI18N
        btnEliminar.setText(resourceMap.getString("btnEliminar.text")); // NOI18N
        btnEliminar.setName("btnEliminar"); // NOI18N

        lbNombre.setText(resourceMap.getString("lbNombre.text")); // NOI18N
        lbNombre.setName("lbNombre"); // NOI18N

        txtNombre.setText(resourceMap.getString("txtNombre.text")); // NOI18N
        txtNombre.setName("txtNombre"); // NOI18N

        matrizPerfiles.setMinimumSize(new java.awt.Dimension(600, 500));
        matrizPerfiles.setName("matrizPerfiles"); // NOI18N

        javax.swing.GroupLayout matrizPerfilesLayout = new javax.swing.GroupLayout(matrizPerfiles);
        matrizPerfiles.setLayout(matrizPerfilesLayout);
        matrizPerfilesLayout.setHorizontalGroup(
            matrizPerfilesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 628, Short.MAX_VALUE)
        );
        matrizPerfilesLayout.setVerticalGroup(
            matrizPerfilesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 473, Short.MAX_VALUE)
        );

        scrollGrid.setName("scrollGrid"); // NOI18N

        gridPerfiles.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Perfil", "Última modificación"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        gridPerfiles.setName("gridPerfiles"); // NOI18N
        scrollGrid.setViewportView(gridPerfiles);
        gridPerfiles.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        gridPerfiles.getSelectionModel().addListSelectionListener(this);

        panelUsuarioBD.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("panelUsuarioBD.border.title"))); // NOI18N
        panelUsuarioBD.setName("panelUsuarioBD"); // NOI18N

        lbNombreBD.setText(resourceMap.getString("lbNombreBD.text")); // NOI18N
        lbNombreBD.setName("lbNombreBD"); // NOI18N

        txtUsuarioBD.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        txtUsuarioBD.setName("txtUsuarioBD"); // NOI18N

        lbContraseña.setText(resourceMap.getString("lbContraseña.text")); // NOI18N
        lbContraseña.setName("lbContraseña"); // NOI18N

        txtPassword.setText(resourceMap.getString("txtPassword.text")); // NOI18N
        txtPassword.setName("txtPassword"); // NOI18N

        lbConfirmar.setText(resourceMap.getString("lbConfirmar.text")); // NOI18N
        lbConfirmar.setName("lbConfirmar"); // NOI18N

        txtConfirmar.setText(resourceMap.getString("txtConfirmar.text")); // NOI18N
        txtConfirmar.setName("txtConfirmar"); // NOI18N

        javax.swing.GroupLayout panelUsuarioBDLayout = new javax.swing.GroupLayout(panelUsuarioBD);
        panelUsuarioBD.setLayout(panelUsuarioBDLayout);
        panelUsuarioBDLayout.setHorizontalGroup(
            panelUsuarioBDLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelUsuarioBDLayout.createSequentialGroup()
                .addGroup(panelUsuarioBDLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lbContraseña)
                    .addComponent(lbNombreBD))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelUsuarioBDLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(txtUsuarioBD)
                    .addComponent(txtPassword, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(lbConfirmar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtConfirmar, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(278, Short.MAX_VALUE))
        );
        panelUsuarioBDLayout.setVerticalGroup(
            panelUsuarioBDLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelUsuarioBDLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelUsuarioBDLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(lbNombreBD)
                    .addComponent(txtUsuarioBD, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(panelUsuarioBDLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(lbContraseña)
                    .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbConfirmar)
                    .addComponent(txtConfirmar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(btnInsertar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnModificar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnEliminar))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lbNombre)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(matrizPerfiles, javax.swing.GroupLayout.DEFAULT_SIZE, 640, Short.MAX_VALUE)
                    .addComponent(panelUsuarioBD, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(scrollGrid, javax.swing.GroupLayout.DEFAULT_SIZE, 640, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(btnAceptar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnCancelar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEliminar)
                    .addComponent(btnModificar)
                    .addComponent(btnInsertar))
                .addGap(19, 19, 19)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbNombre)
                    .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(matrizPerfiles, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(panelUsuarioBD, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(scrollGrid, javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(btnAceptar)
                    .addComponent(btnCancelar))
                .addGap(22, 22, 22))
        );
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAceptar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnInsertar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JTable gridPerfiles;
    private javax.swing.JLabel lbConfirmar;
    private javax.swing.JLabel lbContraseña;
    private javax.swing.JLabel lbNombre;
    private javax.swing.JLabel lbNombreBD;
    private adsec.presentacion.MatrizPerfiles matrizPerfiles;
    private javax.swing.JPanel panelUsuarioBD;
    private javax.swing.JScrollPane scrollGrid;
    private javax.swing.JPasswordField txtConfirmar;
    private javax.swing.JTextField txtNombre;
    private javax.swing.JPasswordField txtPassword;
    private javax.swing.JTextField txtUsuarioBD;
    // End of variables declaration//GEN-END:variables
}
